#ifndef __THREADPOOL_HPP__
#define __THREADPOOL_HPP__

#include "TaskQueue.hpp"
#include <vector>
#include <memory>
#include <functional>

using namespace std;

typedef function<void()> Task; // 重定义回调函数的标签

class Thread;

class Threadpool {
public:
    Threadpool(int threadNum, int bufSize); // 构造函数
    void start(); // 线程池开始执行
    void stop(); // 停止线程池
    void addTask(Task); // 往线程池中添加任务
    void threadFunc(); // 线程池中每个线程的函数执行体
    Task getTask(); // 从缓冲区中获取任务
private:
    int _threadNum; // Linux下的线程类型
    vector<Thread*> vecThreads; // 线程对象的容器
    int _bufSize; // 缓冲区大小
    Buffer buf; // 缓冲区对象
    
};

#endif